#include <stdio.h>
#include <unistd.h>
#include <getopt.h>

int main(int argc, char *argv[])
{
    int opt;
    int symbolic = 0;

    // 解析命令行选项
    while ((opt = getopt(argc, argv, "s")) != -1)
    {
        switch (opt)
        {
        case 's':
            symbolic = 1; // 设置为软链接
            break;
        default:
            fprintf(stderr, "Usage: %s [-s] target linkname\n", argv[0]);
            return 1;
        }
    }

    // 检查参数数量
    if (optind + 2 != argc)
    {
        fprintf(stderr, "Usage: %s [-s] target linkname\n", argv[0]);
        return 1;
    }

    char *target = argv[optind];       // 目标文件
    char *linkname = argv[optind + 1]; // 链接名

    // 根据选项调用相应系统调用
    if (symbolic)
    {
        if (symlink(target, linkname) == -1)
        {
            perror("symlink failed");
            return 1;
        }
    }
    else
    {
        if (link(target, linkname) == -1)
        {
            perror("link failed");
            return 1;
        }
    }

    return 0;
}